单位向量
有 u = (x, y, z),计算长度有
∣∣u∣∣=y2+a2=y2+(x2+z2)2=x2+y2+z2(e q . 1 . 1)
向量是具有大小和方向的量,通常在使用时,大小可以通过乘系数来变换,换句话说,向量的方向属性更具实际意义,因此为了方便使用和计算,通常需要对向量进行归一化操作(将长度设为1)
即:
u^=∥u∥u=(∥u∥x,∥u∥y,∥u∥z)(eq.1.2)
证明有:
∥u^∥=(∥u∥x)2+(∥u∥y)2+(∥u∥z)2=∥u∥2x2+y2+z2=∥u∥∥u∥=1
点积
根据向量定义,点乘即各个分量相乘后相加
u⋅v=uxvx+uyvy+uzvz(eq.1.3)
从物理或几何角度看:
-
当 θ=0∘θ=0∘(两向量同向)时,点积应等于长度乘积,cos0∘=1cos0∘=1 正好给出这个。
-
当 θ=90∘θ=90∘(垂直)时,点积应为 0,cos90∘=0cos90∘=0 正好匹配。
-
当 θ=180∘θ=180∘(反向)时,点积应为负的模长积,cos180∘=−1cos180∘=−1 匹配。
因此
u⋅v=∥u∥∥v∥cosθ(eq.1.4)

数学证明如下:
由余弦定理:
∥u−v∥2=∥u∥2+∥v∥2−2∥u∥∥v∥cosθ
左边用点积展开(基于定义):
∥u−v∥2=(u−v)⋅(u−v)=u⋅u+v⋅v−2u⋅v
即:
∥u−v∥2=∥u∥2+∥v∥2−2u⋅v
对比两个右边表达式:
∥u∥2+∥v∥2−2u⋅v=∥u∥2+∥v∥2−2∥u∥∥v∥cosθ
化简得:
u⋅v=∥u∥∥v∥cosθ
正交化
Projection(投影)

如上图,n为单位向量,即∣∣n∣∣=1,,v为某一向量,∥p∥=∥kn∥=∣k∣∥n∥=∣k∣,根据勾股定理,k=∥v∥cosθ, p=kn=(∣∣v∣∣cosθ)n,
即:
p=(∣∣v∣∣cosθ)n=(∣∣v∣∣⋅1cosθ)n=(∣∣v∣∣∣∣∣n∣∣cosθ)n=(v⋅n)n
我们将v在n方向上的投影用函数proj定义,即:
p=projn(v)=(v⋅n)n
当n不为单位向量,我们同样可以通过归一化将其转变为单位向量再进行计算, 即令∥n∥n。
于是泛化公式:
p=projn(v)=(v⋅∣∣n∣∣n)∣∣n∣∣n=∣∣n∣∣2(v⋅n)n
正交
为什么有正交?
归一化和正交化是为了建立一个“稳定、直观、计算简单”的坐标系
假设我们有一个向量集合{v0,...,vn−1},如果集合中任意向量均与其他集合内的向量相互垂直,且长度均为1,我们称为这是一个正交集合{w0,...,wn−1}。
设集合中包含任意两个向量v0和v1,两者可能既不相交长度也不为1,为了将集合变成正交集合,首先设基准,令w0 = v0,直觉上可以将v1,拆为w1方向上的分量与w0方向上的分量之和,为令v1 转变为 w1,即将v1减去v1在w0方向上的分量
通过投影公式,我们可以得到公式:
w1=v1−projw0(v1)
如图:

扩展到三维空间有
w1=v1−projw0(v1)
w2=v2−projw0(v2)−projw1(v2)

完成正交操作后,再将所有wn向量进行归一化即可
For1≤i≤n−1,Setwi=vi−j=0∑i−1projwj(vi)NormalizationStep:Setwi=∥wi∥wi1≤i≤n−1.
Cross Product(叉积)
叉积仅存在于3D向量中,表示u x v得到同时垂直于两者的向量w,计算公式如下:
w=u×v=(uyvz−uzvy,uzvx−uxvz,uxvy−uyvx)(eq.1.5)
To summarize,
-
Use XMVECTOR for local or global variables.
-
Use XMFLOAT2, XMFLOAT3, and XMFLOAT4 for class data members.
-
Use loading functions to convert from XMFLOATn to XMVECTOR before doing calculations.
-
Do calculations with XMVECTOR instances.
-
Use storage functions to convert from XMVECTOR to XMFLOATn.